var getActiveUploadObj = function(){
    try{
      return new ActiveXObject( "TXFTNActiveX.FTNUpload" );    // IE上传控件
    }catch(e){
      return false;
    }
};

var getFlashUploadObj = function(){
    var supportFlash = function() {return false}
    if ( supportFlash() ){     // supportFlash函数未提供
      var str = '<object type="application/x-shockwave-flash"></object>';
      return $( str ).appendTo( $('body') );
    }
    return false;
};
var getFormUpladObj = function(){
    var str = '<input name="file" type="file" class="ui-file"/>';  // 表单上传
    return str;
};

// 提供一个可以被迭代的方法，使得getActiveUploadObj,getFlashUploadObj以及getFlashUploadObj依照优先级被循环迭代。
// 如果正在被迭代的函数返回一个对象，则表示找到了正确的upload对象，反之如果该函数返回false，则让迭代器继续工作。

var iteratorObj = function () {
    for(var i = 0, fn ; fn = arguments[i++];){
        var result = fn()
        if(result) {
            return result
        }
    }
}

var upLoad = iteratorObj(getActiveUploadObj,getFlashUploadObj,getFormUpladObj)
console.log(upLoad);